package com.org.cloud.lg.api;
//import com.jarvis.cache.annotation.Cache;
import com.org.cloud.lg.model.BaseModel;
import com.org.cloud.lg.model.PageDto;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

public interface MBaseService<D> {

	 /**
	  * 不分页查询list
	 * @param d
	 * @return
	 */
	List<D> listDto(D d);

	/*
	根据map查询list
	 */
	List<D> listDtoByMap(Map<String,Object> map);
	
	
	/**分页查询
	 * @param d
	 * @return
	 */
	PageDto<D> listPage(PageDto<D> d);
	
	
	/**保存对象dto
	 * @param d
	 * @return
	 */
	boolean insert(D d);


	/*
	批量插入dto
	 */
	boolean insertBatch(List<D> dtos);


	/**更新对象dto
	 * @param d
	 * @return
	 */
    @CacheEvict(value = "lg-cache", key = "#root.targetClass+'.getByPk.'+#d.id")
	boolean updateByPk(D d);


	/**
	 * 根据主键查询
	 * @param pk
	 * @return
	 */
	@Cacheable(value="lg-cache", key="#root.targetClass+'.'+#root.methodName+'.'+#root.args[0]")
	D getByPk(Serializable pk);

	/*
	根据单个主键 删除
	 */
    @CacheEvict(value = "lg-cache", key = "#root.targetClass+'.getByPk.'+#d.id")
	boolean deleteByPk(String id);

	/*
	根据多个主键 删除
	 */
	boolean deleteByPks(List<String> ids);

	/*
	 * @Author LG
	 * @Description 根据条件查询单个dto
	 * @Param [d]
	 * @return D
	 **/
	D getOneDto(D d);


	/*
	 * @Author LG
	 * @Description 根据map查询
	 * @Date 10:14 2019/5/22
	 * @Param [param]
	 * @return D
	 **/
	D getOneByMap(Map<String,Object> param);

	/*
	根据map 删除
	 */
    boolean removeByMap(Map<String,Object> param);
}
